/**
 * 
 */
package com.iknight.mgr.mapper;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.iknight.mgr.core.base.BaseMapper;

/**
 * @author Jeryzym
 *
 */
@Repository
public interface RoleMapper<T extends Serializable, PK extends Serializable> extends BaseMapper<T, PK> {
	/**
	 * 定义角色与菜单、角色与权限、角色与人的关系
	 */
	/**
	 * 
	 * @description 生成角色与用户关系
	 * @param params
	 *
	 */
    void grantRoleToUser(List<Map<String, Object>> params);

	/**
	 * 
	 * @description 释放用户与权限关系
	 * @param params
	 *
	 */
    void releaseRoleFromUser(@Param("role_id") String roleId);

	/**
	 * 
	 * @description 生成角色与权限关系
	 * @param params
	 *
	 */
    void grantPermToRole(List<Map<String, Object>> params);

	/**
	 * 
	 * @description 释放权限与角色关系
	 * @param params
	 *
	 */
    void releaseRoleFromPerm(@Param("role_id") String roleId);

	/**
	 * 
	 * @description 生成角色与菜单关系
	 * @param params
	 *
	 */
    void grantMenuToRole(List<Map<String, Object>> params);

	/**
	 * 
	 * @description 释放角色与菜单关系
	 * @param params
	 *
	 */
    void releaseRoleFromMenu(@Param("role_id") String roleId);

	/**
	 * 
	 * @description 根绝角色获取菜单
	 * @param roleId
	 * @return
	 *
	 */
    List<Map> getMenusByRoleId(String roleId);

	/**
	 * 
	 * @description 根据用户ID获取菜单
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getMenusByUserId(String userId);

	/**
	 * 
	 * @description 根据角色获取权限
	 * @param roleId
	 * @return
	 *
	 */
    List<Map> getPermsByRoleId(@Param("role_id") String roleId);

	/**
	 * 
	 * @description 根据用户ID获取权限
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getPermsByUserId(String userId);

	/**
	 * 
	 * @description 根据用户名获取权限
	 * @param username
	 * @return
	 *
	 */
    List<Map> getPermsByUsername(String username);

	/**
	 * 
	 * @description
	 * @param roleId
	 * @param userID
	 * @return
	 *
	 */
    List<Map> getMenusByUserIdWithRoleId(@Param("role_id") String roleId, @Param("user_id") String userID);

	/**
	 * 
	 * @description
	 * @param roleId
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getPermsByUserIdWithRoleId(@Param("role_id") String roleId, @Param("user_id") String userId);

	/**
	 * 
	 * @description
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getRolesByUserId(String userId);

	/**
	 * 
	 * @description
	 * @param username
	 * @return
	 *
	 */
    List<Map> getRolesByUsername(String username);

	/**
	 * 
	 * @description
	 * @param userId
	 * @return
	 *
	 */
    Object getRoleDefinedURIByUsername(String username);

	/**
	 * 
	 * @param username
	 * @return
	 */
    List<Map> getMenusByUsername(String username);

    void releaseMenuFromRole(@Param("menu_id") String menuId);

    void releasePermFromRole(@Param("perm_id") String permId);

    void releaseUserFromRole(@Param("user_id") String userId);

    T getRecordByCode(@Param("role_code") String roleCode);

    List<Map> getUsersByRoleId(@Param("role_id") String roleId);

}
